`timescale 1ns / 1ps
/************************************************************\
 **  Copyright (c) 2022-2023 Gonsin, Inc.
 **  All Right Reserved.
 **  Author: http://www.anlogic.com/
 **  Description: client_FIFO
 **  Rev 1.0
\************************************************************/

module client_FIFO #(
parameter FULL_DUPLEX_ONLY = 0
)
(
// MAC TX 接口
input tx_reset_i,            // 同步复位(tx_clk_i)
input tx_clk_i,              // MAC发送时钟
input tx_clk_en_i,           // tx_clk的时钟使能
output [7:0] txdata8b_o,     // 数据到MAC发送器
output txdata_en_o,          // 有效信号到MAC发送器
input tx_rdy_i,              // 来自MAC发送器的rdy信号
input tx_collision_i,        // 来自MAC发送器的冲突信号
input tx_retransmit_i,       // 来自MAC发送器重新发送信号

// 客户端发送（FIFO侧）接口
input tx_LLclock_i,         // FIFO写时钟
input tx_LLreset_i,         // 同步复位（tx_ll_clock）
input [7:0] tx8b_LLdata_i,  // 数据发送到FIFO
input tx_LLsof_inN_i,       // FIFO的SOF指示
input tx_LLeof_inN_i,       // FIFO的eof指示
input tx_LLsrcRdy_inN_i,    // src Reddy 指示信号到FIFO
output tx_LLdstRdy_outN_o,  // FIFO的dst ready指示
output [3:0] tx4b_fifoStatus_o,   // FIFO存储器状态
output tx_overflow_o,       // FIFO的溢出指示信号

// MAC RX 接口
input rx_reset_i,           // 同步复位（rx_clk）
input rx_clk_i,             // MAC接收时钟
input rx_clkEn_i,           // rx_clk的时钟使能
input [7:0] rxdata8b_i,     // 来自MAC接收器的数据
input rxdata_valid_i,       // 来自MAC接收器的有效信号
input rx_correctFrame_i,    // 来自MAC接收器的正确帧指示
input rx_errorFrame_i,      // 来自MAC接收器的错误帧指示
output rx_overflow_o,       // FIFO的溢出指示信号

// 客户端接收（FIFO侧）接口
input rx_LLclock_i,         // FIFO读取时钟
input rx_LLreset_i,         // 同步复位（rx_ll_clock）
output [7:0] rx8b_LLdata_o, // 来自Rx FIFO的数据
output rx_LLsof_outN_o,     // FIFO中的sof指示
output rx_LLeof_outN_o,     // FIFO的eof指示
output rx_LLsrcRdy_outN_o,  // FIFO的src ready指示
input rx_LLdstRdy_inN_i,    // dst ready 指示信号到FIFO
output [3:0] rx4b_fifoStatus_o    // FIFO存储器状态
);

//----------------------------------------------------------------------------
// Instantiate the Transmitter FIFO
//----------------------------------------------------------------------------
tx_client_fifo #(
.FULL_DUPLEX_ONLY (FULL_DUPLEX_ONLY)
) tx_fifo (
// MAC Interface
.rd_clk_i(tx_clk_i),
.rd_sreset_i(tx_reset_i),
.rd_enable_i(tx_clk_en_i),
.txdata8b_o(txdata8b_o),
.txdata_valid_o(txdata_en_o),
.tx_ack_i(tx_rdy_i),
.tx_collision_i(tx_collision_i),
.tx_retransmit_i(tx_retransmit_i),
.overflow_o(tx_overflow_o),

// Local-link Interface
.wr_clk_i(tx_LLclock_i),
.wr_sreset_i(tx_LLreset_i),
.wrdata8b_i(tx8b_LLdata_i),
.wr_sofN_i(tx_LLsof_inN_i),
.wr_eofN_i(tx_LLeof_inN_i),
.wr_src_rdyN_i(tx_LLsrcRdy_inN_i),
.wr_dst_rdyN_o(tx_LLdstRdy_outN_o),
.wr4b_fifostatus_o(tx4b_fifoStatus_o)
);

//----------------------------------------------------------------------------
// Instantiate the Receiver FIFO
//----------------------------------------------------------------------------
rx_client_fifo rx_fifo (
// Client Interface
.wr_clk_i(rx_clk_i),
.wr_sreset_i(rx_reset_i),
.wr_enable_i(rx_clkEn_i),
.rxdata8b_i(rxdata8b_i),
.rxdata_valid_i(rxdata_valid_i),
.rx_goodFrame_i(rx_correctFrame_i),
.rx_badFrame_i(rx_errorFrame_i),
.overflow_o(rx_overflow_o),

// Local-link Interface    
.rd_clk_i(rx_LLclock_i),
.rd_sreset_i(rx_LLreset_i),
.rddata8b_o(rx8b_LLdata_o),
.rd_sofN_o(rx_LLsof_outN_o),
.rd_eofN_o(rx_LLeof_outN_o),
.rd_src_rdyN_o(rx_LLsrcRdy_outN_o),
.rd_dst_rdyN_i(rx_LLdstRdy_inN_i),
.rx4b_fifoStatus_o(rx4b_fifoStatus_o)
);

endmodule